import { get, post } from "@/api/request";

/**
 * 提醒设置控制器 / 提醒设置控制器新增消息提醒
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 图标
 * @param {number} [data.messageType] 消息类型(1 系统消息 2 其他消息)
 * @param {number} [data.moduleId] 模块名称(菜单id)
 * @param {string} [data.reminderContent] 消息内容
 * @param {string} [data.reminderTime] 发送时间
 * @param {array<string>} [data.reminderUserList] 提醒人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ReminderSettings页面展示实体>}
 * @author 肖玮
 */
export function reminderSettingAdd(data, config) {
  return post("/reminderSetting/add", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器删除详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 */
export function reminderSettingDelete(params, config) {
  return get("/reminderSetting/delete", params, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器查询消息提醒详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<MessageReminderSettingDetailVO详情页面展示实体>}
 */
export function reminderSettingDetailMessage(params, config) {
  return get("/reminderSetting/detailMessage", params, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器查询预警详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<WarningReminderSettingDetailVO详情页面展示实体>}
 */
export function reminderSettingDetailWarning(params, config) {
  return get("/reminderSetting/detailWarning", params, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器消息提醒新增/修改页面菜单列表
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 肖玮
 */
export function reminderSettingMessageEditMenuList(config) {
  return get("/reminderSetting/messageEditMenuList", config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器消息提醒查询页面菜单列表
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 肖玮
 */
export function reminderSettingMessageQueryMenuList(config) {
  return get("/reminderSetting/messageQueryMenuList", config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器分页查询消息提醒
 * @param {object} data
 * @param {number} [data.businessType] 业务类型(预警提醒使用)
 * @param {string} [data.endReminderTime] 发送结束时间
 * @param {number} [data.length] 分页大小
 * @param {number} [data.moduleId] 模块id(消息提醒使用)
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.reminderContent] 消息内容
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.startReminderTime] 发送开始时间
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ReminderSettings页面展示实体>>}
 * @author 肖玮
 */
export function reminderSettingPageMessage(data, config) {
  return post("/reminderSetting/pageMessage", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器分页查询预警提醒
 * @param {object} data
 * @param {number} [data.businessType] 业务类型(预警提醒使用)
 * @param {string} [data.endReminderTime] 发送结束时间
 * @param {number} [data.length] 分页大小
 * @param {number} [data.moduleId] 模块id(消息提醒使用)
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.reminderContent] 消息内容
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.startReminderTime] 发送开始时间
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ReminderSettings页面展示实体>>}
 * @author 肖玮
 */
export function reminderSettingPageWarning(data, config) {
  return post("/reminderSetting/pageWarning", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器设置提醒
 * @param {object} data
 * @param {number} [data.businessId] 业务id
 * @param {number} [data.businessType] 业务类型(1 施工周报 2 施工月报 3 监理周报 4 监理月报 5 投资估算 6 设计概算 7 施工图预算 11 跟踪审计 12 诉讼进度)
 * @param {number} [data.day] 一周的第几天/每月的倒数第几天
 * @param {number} [data.messageType] 消息类型(1 系统消息 2 其他消息)
 * @param {string} [data.reminderContent] 提醒内容
 * @param {number} [data.reminderDateType] 提醒日期类型(1 当前 2 之前 3 之后)
 * @param {number} [data.reminderDay] 提醒天数
 * @param {string} [data.reminderLocalTime] 预警提醒时间(精确到时分)
 * @param {string} [data.reminderMatter] 提醒事项
 * @param {string} [data.reminderTime] 消息提醒时间(精确到年月日时分)
 * @param {number} [data.reminderType] 提醒类型(1 预警提醒 2 消息提醒)
 * @param {array<string>} [data.reminderUserList] 提醒人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ReminderSettings页面展示实体>}
 */
export function reminderSettingSet(data, config) {
  return post("/reminderSetting/set", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器修改消息提醒
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 图标
 * @param {number} [data.day] 一周的第几天/每月的倒数第几天
 * @param {number} [data.id] id
 * @param {number} [data.messageType] 消息类型(1 系统消息 2 其他消息)
 * @param {number} [data.moduleId] 模块名称(菜单id)
 * @param {string} [data.reminderContent] 消息内容
 * @param {number} [data.reminderDateType] 提醒日期类型(1 当前 2 之前 3 之后)
 * @param {number} [data.reminderDay] 提醒天数
 * @param {string} [data.reminderLocalTime] 提醒时间(预警提醒)
 * @param {string} [data.reminderMatter] 提醒事项
 * @param {string} [data.reminderTime] 发送时间(消息提醒)
 * @param {array<string>} [data.reminderUserList] 提醒人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ReminderSettings页面展示实体>}
 * @author 肖玮
 */
export function reminderSettingUpdate(data, config) {
  return post("/reminderSetting/update", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器修改提醒
 * @param {object} data
 * @param {number} [data.businessId] 业务id
 * @param {number} [data.businessType] 业务类型(1 施工周报 2 施工月报 3 监理周报 4 监理月报 5 投资估算 6 设计概算 7 施工图预算 11 跟踪审计 12 诉讼进度)
 * @param {number} [data.id] id
 * @param {number} [data.messageType] 消息类型(1 系统消息 2 其他消息)
 * @param {string} [data.reminderContent] 提醒内容
 * @param {number} [data.reminderDateType] 提醒日期类型(1 当前 2 之前 3 之后)
 * @param {number} [data.reminderDay] 提醒天数
 * @param {string} [data.reminderMatter] 提醒事项
 * @param {string} [data.reminderTime] 提醒时间(精确到时分)
 * @param {number} [data.reminderType] 提醒类型(1 预警提醒 2 消息提醒)
 * @param {array<string>} [data.reminderUserList] 提醒人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ReminderSettings页面展示实体>}
 */
export function reminderSettingUpdateLawLitigationProgressReminder(data, config) {
  return post("/reminderSetting/updateLawLitigationProgressReminder", data, config);
}

/**
 * 提醒设置控制器 / 提醒设置控制器预警提醒查询页面菜单列表
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 肖玮
 */
export function reminderSettingWarningQueryMenuList(config) {
  return get("/reminderSetting/warningQueryMenuList", config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} 附件传输实体 附件传输实体
 * @property {string} attUrl 附件url
 * @property {number} directoryId 目录id
 * @property {number} id 附件id
 * @property {string} originalName 原始文件名
 * @description 附件传输实体
 */

/**
 * @typedef {object} BusinessAttachDetailVO
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {number} attachId 文件id
 * @property {number} attachmentType 文件类型
 * @property {number} businessId 业务ID
 * @property {string} businessType 业务类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {string} filename 文件名称
 * @property {number} id 附件ID
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 */

/**
 * @typedef {object} MessageReminderSettingDetailVO详情页面展示实体 消息提醒设置详情页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件
 * @property {number} businessId 业务id
 * @property {number} businessType 业务类型(1 施工周报 2 施工月报 3 监理周报 4 监理月报 5 投资估算 6 设计概算 7 施工图预算 11 跟踪审计 12 诉讼进度)
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} createTime 编制时间
 * @property {string} createUser 编制人
 * @property {string} createUserDeptName 编制部门名称
 * @property {string} createUserRealName 编制人姓名
 * @property {number} day 一周的第几天/每月的倒数第几天
 * @property {string} icon 图标
 * @property {number} id
 * @property {number} messageType 消息类型(1 系统消息 2 其他消息)
 * @property {string} messageTypeName 消息类型名称
 * @property {number} moduleId 模块id(对应二级/三级菜单)
 * @property {string} moduleName 模块名称
 * @property {string} reminderContent 提醒内容
 * @property {number} reminderDateType 提醒日期类型(1 当前 2 之前 3 之后)
 * @property {string} reminderMatter 提醒事项
 * @property {string} reminderTime 提醒时间
 * @property {number} reminderType 提醒类型(1 预警提醒 2 消息提醒)
 * @property {array<string>} reminderUserList 提醒人
 * @property {array<string>} reminderUserNameList 提醒人名称
 * @property {array<string>} userList 提醒人(不含部门)
 * @description 消息提醒设置详情页面展示实体
 */

/**
 * @typedef {object} Permission页面展示实体 页面展示实体
 * @property {number} applicationId 应用ID
 * @property {object} attachment 附件页面展示实体
 * @property {string} attachment.attKey 附件key
 * @property {number} attachment.attOrder 附件排序
 * @property {number} attachment.attSize 附件大小(单位:MB)
 * @property {string} attachment.attSizeString 附件大小
 * @property {string} attachment.attSuffix 附件后缀
 * @property {string} attachment.attUrl 附件url
 * @property {string} attachment.attachmentType 文件类型
 * @property {string} attachment.createTime 创建时间
 * @property {string} attachment.createUser 创建用户
 * @property {boolean} attachment.delFlag 删除标识(false:否, true:是)
 * @property {number} attachment.directoryId 目录id
 * @property {number} attachment.id 主键
 * @property {string} attachment.originalName 原始文件名
 * @property {string} attachment.remark 备注
 * @property {string} attachment.updateTime 修改时间
 * @property {string} attachment.updateUser 修改用户
 * @property {string} btnIdentifying 按钮标识
 * @property {string} code 权限编码
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {string} highlightUrl 高亮地址
 * @property {string} icon 菜单图标
 * @property {string} id 主键
 * @property {number} image 图片ID
 * @property {string} imageUrl 图片地址
 * @property {boolean} isBreadcrumbShow 是否显示在面包屑中（false不显示；true显示）
 * @property {boolean} isIndexShow 是否在首页显示
 * @property {boolean} isNavbarShow 是否显示在左侧导航栏中（false不显示；true显示）
 * @property {string} name 权限名称
 * @property {number} orderValue 排序值
 * @property {string} parameters 路由参数
 * @property {string} parentId 上级编码
 * @property {string} redirectUrl 重定向地址
 * @property {string} status 菜单状态 可选值: DISABLE, ENABLE
 * @property {string} type 权限类型 可选值: BUTTON, MENU
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} url 路由地址
 * @description 页面展示实体
 */

/**
 * @typedef {object} ReminderSettings页面展示实体 提醒设置页面展示实体
 * @property {number} businessId 业务id
 * @property {number} businessType 业务类型(1 施工周报 2 施工月报 3 监理周报 4 监理月报 5 投资估算 6 设计概算 7 施工图预算 11 跟踪审计 12 诉讼进度)
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} createUser 编制人
 * @property {string} createUserDeptName 创建人所属部门
 * @property {string} createUserRealName 编制人姓名
 * @property {number} day 一周的第几天/每月的倒数第几天
 * @property {string} icon 图标
 * @property {number} id
 * @property {number} messageType 消息类型(1 系统消息 2 其他消息)
 * @property {number} moduleId 模块id(对应二级/三级菜单)
 * @property {string} moduleName 模块名称
 * @property {string} reminderContent 提醒内容
 * @property {number} reminderDateType 提醒日期类型(1 当前 2 之前 3 之后)
 * @property {string} reminderLocalTime 提醒时间(预警配置)
 * @property {string} reminderMatter 提醒事项
 * @property {string} reminderTime 发送时间(消息提醒)
 * @property {number} reminderType 提醒类型(1 预警提醒 2 消息提醒)
 * @property {array<string>} reminderUserList 提醒人
 * @property {string} warningReminderTime 发送时间(预警配置)
 * @description 提醒设置页面展示实体
 */

/**
 * @typedef {object} WarningReminderSettingDetailVO详情页面展示实体 预警提醒设置详情页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件
 * @property {number} businessId 业务id
 * @property {number} businessType 业务类型(1 施工周报 2 施工月报 3 监理周报 4 监理月报 5 投资估算 6 设计概算 7 施工图预算 11 跟踪审计 12 诉讼进度)
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} createTime 编制时间
 * @property {string} createUser 编制人
 * @property {string} createUserDeptName 编制部门名称
 * @property {string} createUserRealName 编制人姓名
 * @property {number} day 一周的第几天/每月的倒数第几天
 * @property {number} id
 * @property {number} messageType 消息类型(1 系统消息 2 其他消息)
 * @property {string} messageTypeName 消息类型名称
 * @property {number} moduleId 模块id(对应二级/三级菜单)
 * @property {string} moduleName 模块名称
 * @property {string} reminderContent 提醒内容
 * @property {number} reminderDateType 提醒日期类型(1 当前 2 之前 3 之后)
 * @property {string} reminderMatter 提醒事项
 * @property {string} reminderTime 提醒时间
 * @property {number} reminderType 提醒类型(1 预警提醒 2 消息提醒)
 * @property {array<string>} reminderUserList 提醒人
 * @property {array<string>} reminderUserNameList 提醒人名称
 * @property {array<string>} userList 提醒人(不含部门)
 * @property {string} warningReminderTime 发送时间(预警配置)
 * @description 预警提醒设置详情页面展示实体
 */
